package com.gxuwz.nio;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class FileChannelDemo {
    public static void main(String[] args) throws IOException {
        RandomAccessFile accessFile = new RandomAccessFile("D:\\home\\test.txt", "rw");
        FileChannel fileChannel = accessFile.getChannel();

        //allocate：分配新的字节缓冲区，指定字节数
        ByteBuffer byteBuffer = ByteBuffer.allocate(48);

        int read = fileChannel.read(byteBuffer);
        while (read!=-1){
            System.out.println("读取: "+read);
            /**
            翻转此缓冲区。将限制设置为当前位置，然后将位置设置为零。如果定义了标记，则丢弃该标记。

            在一系列通道读取或放置操作之后，调用此方法为通道写入或相对获取操作序列做准备。
             */
            //反转读写模式
            byteBuffer.flip();
            //hasRemaining:判断是否还有内容
            while (byteBuffer.hasRemaining()){
                System.out.print((char) byteBuffer.get());
            }
            //清除缓存区
            byteBuffer.clear();
            read = fileChannel.read(byteBuffer);

        }
        //关闭FileChannel
        fileChannel.close();
        System.out.println("操作结束");


    }
}
